"""
1014. 最佳观光组合
数组 动态规划
中等


给你一个正整数数组 values，其中 values[i] 表示第 i 个观光景点的评分，并且两个景点 i 和 j 之间的 距离 为 j - i。

一对景点（i < j）组成的观光组合的得分为 values[i] + values[j] + i - j ，也就是景点的评分之和 减去 它们两者之间的距离。

返回一对观光景点能取得的最高分。

 

示例 1：

输入：values = [8,1,5,2,6]
输出：11
解释：i = 0, j = 2, values[i] + values[j] + i - j = 8 + 5 + 0 - 2 = 11
示例 2：

输入：values = [1,2]
输出：2
 

提示：

2 <= values.length <= 5 * 10^4
1 <= values[i] <= 1000

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/best-sightseeing-pair
"""
from typing import List


class Solution:
    def maxScoreSightseeingPair(self, values: List[int]) -> int:
        ans = 0
        mx = values[0] + 0
        for i in range(1, len(values)):
            ans = max(ans, mx + values[i] - i)
            mx = max(mx, values[i] + i)
        return ans


if __name__ == '__main__':
    solution = Solution()

    result = solution.maxScoreSightseeingPair([8, 1, 5, 2, 6])
    print(result)
    assert result == 11

    result = solution.maxScoreSightseeingPair([1, 2])
    print(result)
    assert result == 2
